 /**
 * 公用常量定义
 * 包含设施状态、楼层、类型等前后端共用的枚举和常量
 */

// ==================== 艺人相关常量 ====================

/**
 * 艺人状态枚举
 */
export enum ArtistStatus {
  ACTIVE = 'ACTIVE',
  INACTIVE = 'INACTIVE'
}

/**
 * 艺人状态选项
 */
export const ARTIST_STATUS_OPTIONS = [
  { label: '活跃', value: ArtistStatus.ACTIVE },
  { label: '非活跃', value: ArtistStatus.INACTIVE }
]

// ==================== 演出相关常量 ====================

/**
 * 演出状态枚举
 */
export enum PerformanceStatus {
  SCHEDULED = 'SCHEDULED',
  ONGOING = 'ONGOING',
  COMPLETED = 'COMPLETED',
  CANCELLED = 'CANCELLED'
}

/**
 * 演出状态选项
 */
export const PERFORMANCE_STATUS_OPTIONS = [
  { label: '已安排', value: PerformanceStatus.SCHEDULED },
  { label: '进行中', value: PerformanceStatus.ONGOING },
  { label: '已完成', value: PerformanceStatus.COMPLETED },
  { label: '已取消', value: PerformanceStatus.CANCELLED }
]

// ==================== 用户相关常量 ====================

/**
 * 用户状态枚举
 */
export enum UserStatus {
  ACTIVE = 'ACTIVE',
  INACTIVE = 'INACTIVE',
  BANNED = 'BANNED'
}

/**
 * 用户状态选项
 */
export const USER_STATUS_OPTIONS = [
  { label: '活跃', value: UserStatus.ACTIVE },
  { label: '非活跃', value: UserStatus.INACTIVE },
  { label: '已封禁', value: UserStatus.BANNED }
]

/**
 * 角色状态枚举
 */
export enum RoleStatus {
  ACTIVE = 'ACTIVE',
  INACTIVE = 'INACTIVE'
}

/**
 * 角色状态选项
 */
export const ROLE_STATUS_OPTIONS = [
  { label: '活跃', value: RoleStatus.ACTIVE },
  { label: '非活跃', value: RoleStatus.INACTIVE }
]

// ==================== 徽章相关常量 ====================

/**
 * 徽章类型枚举
 */
export enum BadgeType {
  ACHIEVEMENT = 'ACHIEVEMENT', // 成就
  COLLECTION = 'COLLECTION',   // 收集
  SPECIAL = 'SPECIAL'          // 特殊
}

/**
 * 徽章类型选项
 */
export const BADGE_TYPE_OPTIONS = [
  { label: '成就', value: BadgeType.ACHIEVEMENT },
  { label: '收集', value: BadgeType.COLLECTION },
  { label: '特殊', value: BadgeType.SPECIAL }
]

/**
 * 徽章条件类型枚举
 */
export enum BadgeConditionType {
  VOTE_COUNT = 'VOTE_COUNT',           // 投票次数
  PERFORMANCE_ATTENDANCE = 'PERFORMANCE_ATTENDANCE', // 演出参与
  DAYS_ACTIVE = 'DAYS_ACTIVE',         // 活跃天数
  ARTIST_FOLLOW = 'ARTIST_FOLLOW'      // 艺人关注
}

/**
 * 徽章条件类型选项
 */
export const BADGE_CONDITION_TYPE_OPTIONS = [
  { label: '投票次数', value: BadgeConditionType.VOTE_COUNT },
  { label: '演出参与', value: BadgeConditionType.PERFORMANCE_ATTENDANCE },
  { label: '活跃天数', value: BadgeConditionType.DAYS_ACTIVE },
  { label: '艺人关注', value: BadgeConditionType.ARTIST_FOLLOW }
]

// ==================== 通知相关常量 ====================

/**
 * 通知类型枚举
 */
export enum NotificationType {
  PERFORMANCE = 'PERFORMANCE', // 演出
  VOTE = 'VOTE',               // 投票
  SYSTEM = 'SYSTEM',           // 系统
  PROMOTION = 'PROMOTION'      // 推广
}

/**
 * 通知类型选项
 */
export const NOTIFICATION_TYPE_OPTIONS = [
  { label: '演出', value: NotificationType.PERFORMANCE },
  { label: '投票', value: NotificationType.VOTE },
  { label: '系统', value: NotificationType.SYSTEM },
  { label: '推广', value: NotificationType.PROMOTION }
]

// ==================== 助手相关常量 ====================

/**
 * 助手消息类型枚举
 */
export enum AssistantMessageType {
  USER = 'USER',           // 用户消息
  ASSISTANT = 'ASSISTANT'  // 助手消息
}

/**
 * 助手消息格式枚举
 */
export enum AssistantMessageFormat {
  TEXT = 'TEXT',           // 文本
  VOICE = 'VOICE',         // 语音
  IMAGE = 'IMAGE'          // 图片
}

// ==================== 系统配置相关常量 ====================

/**
 * 配置类型枚举
 */
export enum ConfigType {
  STRING = 'STRING',
  NUMBER = 'NUMBER',
  BOOLEAN = 'BOOLEAN',
  JSON = 'JSON'
}

/**
 * 配置类型选项
 */
export const CONFIG_TYPE_OPTIONS = [
  { label: '字符串', value: ConfigType.STRING },
  { label: '数字', value: ConfigType.NUMBER },
  { label: '布尔值', value: ConfigType.BOOLEAN },
  { label: 'JSON', value: ConfigType.JSON }
]

// ==================== 工具函数 ====================
type TagType = 'success' | 'danger' | 'warning' | 'info' | 'primary';
/**
 * 获取艺人状态标签类型
 * @param status 艺人状态
 * @returns 标签类型
 */
export function getArtistStatusTagType(status: ArtistStatus): TagType {
  const statusMap: Record<ArtistStatus, TagType> = {
    [ArtistStatus.ACTIVE]: 'success',
    [ArtistStatus.INACTIVE]: 'info'
  }
  return statusMap[status] || 'info' as TagType
}

/**
 * 获取艺人状态文本
 * @param status 艺人状态
 * @returns 状态文本
 */
export function getArtistStatusText(status: ArtistStatus): string {
  const statusMap: Record<ArtistStatus, string> = {
    [ArtistStatus.ACTIVE]: '活跃',
    [ArtistStatus.INACTIVE]: '非活跃'
  }
  return statusMap[status] || status
}

/**
 * 获取演出状态标签类型
 * @param status 演出状态
 * @returns 标签类型
 */
export function getPerformanceStatusTagType(status: PerformanceStatus): TagType {
  const statusMap: Record<PerformanceStatus, TagType> = {
    [PerformanceStatus.SCHEDULED]: 'info',
    [PerformanceStatus.ONGOING]: 'success',
    [PerformanceStatus.COMPLETED]: 'warning',
    [PerformanceStatus.CANCELLED]: 'danger'
  }
  return statusMap[status] || 'info' as TagType
}

/**
 * 获取演出状态文本
 * @param status 演出状态
 * @returns 状态文本
 */
export function getPerformanceStatusText(status: PerformanceStatus): string {
  const statusMap: Record<PerformanceStatus, string> = {
    [PerformanceStatus.SCHEDULED]: '已安排',
    [PerformanceStatus.ONGOING]: '进行中',
    [PerformanceStatus.COMPLETED]: '已完成',
    [PerformanceStatus.CANCELLED]: '已取消'
  }
  return statusMap[status] || status
}

/**
 * 获取用户状态标签类型
 * @param status 用户状态
 * @returns 标签类型
 */
export function getUserStatusTagType(status: UserStatus): TagType {
  const statusMap: Record<UserStatus, TagType> = {
    [UserStatus.ACTIVE]: 'success',
    [UserStatus.INACTIVE]: 'info',
    [UserStatus.BANNED]: 'danger'
  }
  return statusMap[status] || 'info' as TagType
}

/**
 * 获取用户状态文本
 * @param status 用户状态
 * @returns 状态文本
 */
export function getUserStatusText(status: UserStatus): string {
  const statusMap: Record<UserStatus, string> = {
    [UserStatus.ACTIVE]: '活跃',
    [UserStatus.INACTIVE]: '非活跃',
    [UserStatus.BANNED]: '已封禁'
  }
  return statusMap[status] || status
}

/**
 * 获取徽章类型标签类型
 * @param type 徽章类型
 * @returns 标签类型
 */
export function getBadgeTypeTagType(type: BadgeType): TagType {
  const typeMap: Record<BadgeType, TagType> = {
    [BadgeType.ACHIEVEMENT]: 'success',
    [BadgeType.COLLECTION]: 'warning',
    [BadgeType.SPECIAL]: 'danger'
  }
  return typeMap[type] || 'info' as TagType
}

/**
 * 获取徽章类型文本
 * @param type 徽章类型
 * @returns 类型文本
 */
export function getBadgeTypeText(type: BadgeType): string {
  const typeMap: Record<BadgeType, string> = {
    [BadgeType.ACHIEVEMENT]: '成就',
    [BadgeType.COLLECTION]: '收集',
    [BadgeType.SPECIAL]: '特殊'
  }
  return typeMap[type] || type
}

/**
 * 获取徽章条件类型文本
 * @param conditionType 条件类型
 * @returns 条件类型文本
 */
export function getBadgeConditionTypeText(conditionType: BadgeConditionType): string {
  const conditionTypeMap: Record<BadgeConditionType, string> = {
    [BadgeConditionType.VOTE_COUNT]: '投票次数',
    [BadgeConditionType.PERFORMANCE_ATTENDANCE]: '演出参与',
    [BadgeConditionType.DAYS_ACTIVE]: '活跃天数',
    [BadgeConditionType.ARTIST_FOLLOW]: '艺人关注'
  }
  return conditionTypeMap[conditionType] || conditionType
}

/**
 * 获取通知类型标签类型
 * @param type 通知类型
 * @returns 标签类型
 */
export function getNotificationTypeTagType(type: NotificationType): TagType {
  const typeMap: Record<NotificationType, TagType> = {
    [NotificationType.PERFORMANCE]: 'success',
    [NotificationType.VOTE]: 'warning',
    [NotificationType.SYSTEM]: 'info',
    [NotificationType.PROMOTION]: 'primary'
  }
  return typeMap[type] || 'info' as TagType
}

/**
 * 获取通知类型文本
 * @param type 通知类型
 * @returns 类型文本
 */
export function getNotificationTypeText(type: NotificationType): string {
  const typeMap: Record<NotificationType, string> = {
    [NotificationType.PERFORMANCE]: '演出',
    [NotificationType.VOTE]: '投票',
    [NotificationType.SYSTEM]: '系统',
    [NotificationType.PROMOTION]: '推广'
  }
  return typeMap[type] || type
}

/**
 * 获取配置类型标签类型
 * @param type 配置类型
 * @returns 标签类型
 */
export function getConfigTypeTagType(type: string): TagType {
  const typeMap: Record<string, TagType> = {
    [ConfigType.STRING]: 'info',
    [ConfigType.NUMBER]: 'success',
    [ConfigType.BOOLEAN]: 'warning',
    [ConfigType.JSON]: 'info'
  }
  return typeMap[type] || 'info' as TagType
}

/**
 * 获取配置类型文本
 * @param type 配置类型
 * @returns 类型文本
 */
export function getConfigTypeText(type: string): string {
  const typeMap: Record<string, string> = {
    [ConfigType.STRING]: '字符串',
    [ConfigType.NUMBER]: '数字',
    [ConfigType.BOOLEAN]: '布尔值',
    [ConfigType.JSON]: 'JSON'
  }
  return typeMap[type] || type
}